新增抗原检测结果

FFIB 2 年 前
コミット
bc0eed9c8a
共有5 個のファイルを変更した146 個の追加9 個の削除を含む
  1. 39 0
      api/antigen_views.py
  2. 7 2
      api/urls.py
  3. 6 1
      equipment/admin.py
  4. 43 0
      equipment/migrations/0028_auto_20220817_1425.py
  5. 51 6
      equipment/models.py

+ 39 - 0
api/antigen_views.py

@@ -0,0 +1,39 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from __future__ import division
4
+
5
+from django_logit import logit
6
+from django_response import response
7
+from TimeConvert import TimeConvert as tc
8
+
9
+from equipment.models import IsolationPointUserInfo, AntigenMeasureLogInfo
10
+
11
+
12
+def upload_antigen(request):
13
+    macid = request.POST.get('macid', '')
14
+    user_name = request.POST.get('user_name', '')
15
+    phone = request.POST.get('phone', 1)
16
+    result = request.POST.get('result', 2)
17
+    detect_at = request.POST.get('detect_at', '')
18
+
19
+    detect_at = tc.string_to_datetime(detect_at, format='%Y-%m-%d %H:%M:%S')
20
+
21
+    try:
22
+        user = IsolationPointUserInfo.objects.get(fields__icontains=phone, status=True)
23
+        user.detect_at = detect_at
24
+        user.result = result
25
+        user.save()
26
+    except IsolationPointUserInfo.DoesNotExist:
27
+        user = None
28
+
29
+    AntigenMeasureLogInfo.objects.create(
30
+        point_id=user.point_id if user else '',
31
+        user_id=user.user_id if user else '',
32
+        macid=macid,
33
+        user_name=user_name,
34
+        phone=phone,
35
+        result=result,
36
+        detect_at=detect_at
37
+    )
38
+
39
+    return response(200, '', 'Antigen Upload Success', '抗原检测上传成功')

+ 7 - 2
api/urls.py

@@ -3,7 +3,7 @@
3 3
 from django.conf.urls import url
4 4
 
5 5
 from api import (admin_views, aep_views, eqpt_views, field_views, mini_views, oauth_views, point_views, screen_views,
6
-                 wx_views)
6
+                 wx_views, antigen_views)
7 7
 
8 8
 
9 9
 urlpatterns = [
@@ -47,7 +47,7 @@ urlpatterns += [
47 47
     url(r'^upload/temperature$', eqpt_views.upload_temperature, name='upload_temperature'),
48 48
 ]
49 49
 
50
-#Admin
50
+# Admin
51 51
 urlpatterns += [
52 52
     url(r'^admin/user/result$', point_views.admin_user_results, name='admin_user_results'),
53 53
 
@@ -88,3 +88,8 @@ urlpatterns += [
88 88
 urlpatterns += [
89 89
     url(r'^v2/upload/temperature$', aep_views.aep_upload_temperature, name='aep_upload_temperature'),
90 90
 ]
91
+
92
+# Antigen
93
+urlpatterns += [
94
+    url(r'^upload/antihelion$', antigen_views.upload_antigen, name='antigen_upload'),
95
+]

+ 6 - 1
equipment/admin.py

@@ -4,7 +4,7 @@ from django.contrib import admin
4 4
 from django_admin import ReadOnlyModelAdmin
5 5
 
6 6
 from equipment.models import (AepThermometerMeasureLogInfo, IsolationPointFieldPoolInfo, IsolationPointInfo,
7
-                              IsolationPointUserInfo, ThermometerEquipmentInfo, ThermometerMeasureLogInfo)
7
+                              IsolationPointUserInfo, ThermometerEquipmentInfo, ThermometerMeasureLogInfo, AntigenMeasureLogInfo)
8 8
 
9 9
 
10 10
 class IsolationPointFieldPoolInfoAdmin(admin.ModelAdmin):
@@ -33,9 +33,14 @@ class AepThermometerMeasureLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
33 33
     list_display = ('imei', 'temperature_src', 'temperature', 'battery', 'status', 'created_at', 'updated_at')
34 34
 
35 35
 
36
+class AntigenMeasureLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
37
+    list_display = ('point_id', 'user_id', 'macid', 'phone', 'user_name', 'result', 'detect_at', 'created_at', 'updated_at')
38
+
39
+
36 40
 admin.site.register(IsolationPointFieldPoolInfo, IsolationPointFieldPoolInfoAdmin)
37 41
 admin.site.register(IsolationPointInfo, IsolationPointInfoAdmin)
38 42
 admin.site.register(IsolationPointUserInfo, IsolationPointUserInfoAdmin)
39 43
 admin.site.register(ThermometerEquipmentInfo, ThermometerEquipmentInfoAdmin)
40 44
 admin.site.register(ThermometerMeasureLogInfo, ThermometerMeasureLogInfoAdmin)
41 45
 admin.site.register(AepThermometerMeasureLogInfo, AepThermometerMeasureLogInfoAdmin)
46
+admin.site.register(AntigenMeasureLogInfo, AntigenMeasureLogInfoAdmin)

+ 43 - 0
equipment/migrations/0028_auto_20220817_1425.py

@@ -0,0 +1,43 @@
1
+# Generated by Django 3.2.8 on 2022-08-17 06:25
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('equipment', '0027_auto_20220707_1801'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.CreateModel(
14
+            name='AntigenMeasureLogInfo',
15
+            fields=[
16
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
18
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
19
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
20
+                ('point_id', models.CharField(blank=True, db_index=True, help_text='隔离点唯一标识', max_length=32, null=True, verbose_name='point_id')),
21
+                ('user_id', models.CharField(blank=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
22
+                ('macid', models.CharField(blank=True, help_text='设备号', max_length=32, null=True, verbose_name='macid')),
23
+                ('phone', models.CharField(blank=True, help_text='用户手机号', max_length=11, null=True, verbose_name='phone')),
24
+                ('user_name', models.CharField(blank=True, help_text='用户姓名', max_length=255, null=True, verbose_name='user_name')),
25
+                ('result', models.IntegerField(choices=[(0, '阴性'), (1, '阳性'), (2, '未知')], default=2, help_text='抗原检测结果', verbose_name='result')),
26
+                ('detect_at', models.DateTimeField(blank=True, help_text='检测时间', null=True, verbose_name='detect_at')),
27
+            ],
28
+            options={
29
+                'verbose_name': '抗原检测记录信息',
30
+                'verbose_name_plural': '抗原检测记录信息',
31
+            },
32
+        ),
33
+        migrations.AddField(
34
+            model_name='isolationpointuserinfo',
35
+            name='antigen_result',
36
+            field=models.IntegerField(choices=[(0, '阴性'), (1, '阳性'), (2, '未知')], default=2, help_text='抗原检测结果', verbose_name='antigen_result'),
37
+        ),
38
+        migrations.AddField(
39
+            model_name='isolationpointuserinfo',
40
+            name='detect_at',
41
+            field=models.DateTimeField(blank=True, help_text='检测时间', null=True, verbose_name='detect_at'),
42
+        ),
43
+    ]

+ 51 - 6
equipment/models.py

@@ -119,6 +119,16 @@ class IsolationPointUserInfo(BaseModelMixin):
119 119
     HAS_YET_UPLOAD = '已上报'
120 120
     CHG_STA_CHARGING = '充电中'
121 121
 
122
+    NEGATIVE = 0
123
+    POSITIVE = 1
124
+    UNKNOWN = 2
125
+
126
+    ANTIGEN_RESULT_TYPE = (
127
+        (NEGATIVE, '阴性'),
128
+        (POSITIVE, '阳性'),
129
+        (UNKNOWN, '未知'),
130
+    )
131
+
122 132
     point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
123 133
 
124 134
     user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True)
@@ -138,6 +148,9 @@ class IsolationPointUserInfo(BaseModelMixin):
138 148
 
139 149
     eqpts = JSONField(_('eqpts'), default=[], blank=True, null=True, help_text='使用设备记录')
140 150
 
151
+    antigen_result = models.IntegerField(_('antigen_result'), choices=ANTIGEN_RESULT_TYPE, default=UNKNOWN, help_text='抗原检测结果')
152
+    detect_at = models.DateTimeField(_('detect_at'), blank=True, null=True, help_text='检测时间')
153
+
141 154
     class Meta:
142 155
         verbose_name = _('隔离点用户录入信息')
143 156
         verbose_name_plural = _('隔离点用户录入信息')
@@ -184,14 +197,16 @@ class IsolationPointUserInfo(BaseModelMixin):
184 197
             'last_submit_at': self.last_submit_at,
185 198
             'last_report_time': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '',
186 199
             'remark': self.remark or '',
200
+            'antigen_result': self.get_antigen_result_display(),
201
+            'detect_at': tc.local_string(utc_dt=self.detect_at, format='%m-%d %H:%M') if self.detect_at else '',
187 202
         }
188 203
 
189 204
     @property
190 205
     def userdata(self):
191 206
         return {
192
-           'point_id': self.point_id,
193
-           'user_id': self.user_id,
194
-           **{ field.get('key', ''): field.get('value', '') for field in self.fields }
207
+            'point_id': self.point_id,
208
+            'user_id': self.user_id,
209
+            **{field.get('key', ''): field.get('value', '') for field in self.fields}
195 210
         }
196 211
 
197 212
 
@@ -296,15 +311,15 @@ class ThermometerMeasureLogInfo(BaseModelMixin):
296 311
             'temperature': self.temperature,
297 312
             'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),
298 313
         }
299
-    
314
+
300 315
     @property
301 316
     def userdata(self):
302
-         return {
317
+        return {
303 318
             'macid': self.macid,
304 319
             'sn': self.sn,
305 320
             'temperature': self.temperature,
306 321
             'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M'),
307
-        }       
322
+        }
308 323
 
309 324
 
310 325
 class AepThermometerMeasureLogInfo(BaseModelMixin):
@@ -352,3 +367,33 @@ class AepThermometerMeasureLogInfo(BaseModelMixin):
352 367
 
353 368
     def __unicode__(self):
354 369
         return self.pk
370
+
371
+
372
+class AntigenMeasureLogInfo(BaseModelMixin):
373
+
374
+    NEGATIVE = 0
375
+    POSITIVE = 1
376
+    UNKNOWN = 2
377
+
378
+    ANTIGEN_RESULT_TYPE = (
379
+        (NEGATIVE, '阴性'),
380
+        (POSITIVE, '阳性'),
381
+        (UNKNOWN, '未知'),
382
+    )
383
+
384
+    point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
385
+
386
+    user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识')
387
+
388
+    macid = models.CharField(_('macid'), max_length=32, blank=True, null=True, help_text='设备号')
389
+    phone = models.CharField(_('phone'), max_length=11, blank=True, null=True, help_text='用户手机号')
390
+    user_name = models.CharField(_('user_name'), max_length=255, blank=True, null=True, help_text='用户姓名')
391
+    result = models.IntegerField(_('result'), choices=ANTIGEN_RESULT_TYPE, default=UNKNOWN, help_text='抗原检测结果')
392
+    detect_at = models.DateTimeField(_('detect_at'), blank=True, null=True, help_text='检测时间')
393
+
394
+    class Meta:
395
+        verbose_name = _('抗原检测记录信息')
396
+        verbose_name_plural = _('抗原检测记录信息')
397
+
398
+    def __unicode__(self):
399
+        return self.pk